# encoding: utf-8
class ParceladosController < ApplicationController
	
	before_filter :load_parcelado, :only => [:show, :edit, :update, :delete, :destroy, :confirm]
	
	#
	#
	def index
		@parcelados = current_usuario.parcelados
	end
	
	#
	#
	def new
		@parcelado = session[:parcelado] || Parcelado.new
		session.delete(:parcelado)
	end
	
	#
	#
	def edit
		@parcelado = session[:parcelado] || @parcelado
		session.delete(:parcelado)
	end
	
	#
	#
	def confirm
		info "iniciando"

		if @parcelado
			@parcelado.attributes = params[:parcelado]
		else
			@parcelado = Parcelado.new(params[:parcelado])
		end

		@parcelado.usuario = current_usuario

		@parcelas = ParceladoService.simular_parcelas(@parcelado)
		
		unless @parcelado.valid?
			debug "despesa invalida"

			render :new		
		end	
		session[:parcelado] = @parcelado
	end
	
	#
	#
	def create
		info "iniciando"

		@parcelado = Parcelado.new(params[:parcelado])
		@parcelado.usuario = current_usuario
		@parcelado.parcelamento.each { |p| p.parcelado = @parcelado }
		
		info "criando parcelamento"

		info "persistindo"		
		if @parcelado.save
			info "sucesso"			

			session.delete(:parcelado)
			redirect_to parcelados_path, :notice => "Despesa parcelada criada com sucesso."
		else
			error "erro #{@parcelado.errors.full_messages.to_s}"

			render :new
		end
	end

	#
	#
	def update
		info "iniciando"

		@parcelado.usuario = current_usuario

		info "persistindo"
		if ParceladoService.atualizar_parcelado(@parcelado, params[:parcelado])
			info "sucesso"

			session.delete(:parcelado)
			redirect_to parcelado_path(@parcelado), :notice => "Despesa parcelada atualizada com sucesso."
		else
			error "erro #{@parcelado.errors.full_messages.to_s}"

			render :new
		end
	end

	#
	#
	def destroy
		if @parcelado.destroy
			redirect_to parcelados_path, :notice => "Despesa excluída com sucesso"
		else
			render :delete
		end	
	end

	private
	
	#
	#
	def load_parcelado
		if params[:id]
			begin
				@parcelado = Parcelado.find(params[:id])
			rescue ActiveRecord::RecordNotFound
				redirect_to root_path, :alert => "Despesa inválida" and return
			end
			
			unless belongs_to_current_usuario?(@parcelado)
				redirect_to root_path, :alert => "Operação inválida" and return
			end
		end
	end
	
end
